Changes since ViRC 2.0 RC5: --- Additions --- * You can now select all text in the input box with Ctrl+A. * The script editor's event properties page now has a button to select from some common event masks. Click it to see a popup menu of the different event templates, then fill in the blanks to create a mask for your event. The templates are read from the file "eventmasks.ini" in your script path. * You can ignore or unignore users from the nick list popup. * New alias: /squery * New function: $IsIgnoringNick(nick) * The tab bar has been moved to a binary plugin, vp_tabbar.bpl. This will allow the tab bar to be replaced in the future, but some of the tab bar configuration settings have been disabled in this version. The tab bar configuration will be working again soon, in a different form. Please be patient. * A mouse gestures plugin (beta) is now included, vp_gestures.bpl. If you chose to install it but now want to uninstall it, either delete the file or move it to another folder. --- Changed features --- * events now receive an error number of -1 and a message of "Cancelled remotely" when the remote end closes any DCC chat, or when the remote end closes a DCC file transfer that hasn't yet completed. * New events that you create in the script editor now start out as "after" events. * /wall only sends to 9 nicks at once. * VSInterp OLE Automation updates: - External apps can now pass interface pointers to OVS dispatch objects. The interface will be assigned an object handle for the duration of the method call, then unmapped. - The GetInterface() function now returns the actual IDispatch interface for mapped OLE interfaces, instead of an OVS wrapper. - OVS objects can now be passed to OLE Automation methods. A wrapper will be created automatically, just as with GetInterface(). * The active nicks popup and hyperlink popups are now initialized in an OnStart event instead of in virc.lib's footer. This means you can merge items into the nick list popup from an add-on script, and they will appear when you right-click an active nick in the output pane (after restarting ViRC). --- Bug fixes --- * Fixed a wildcard bug where "v% *" wouldn't match "v foo". (The bug occurred when % matched an empty string and was followed by a space in the pattern.) * The hyperlink popup appears for URLs in the status window. * URLs surrounded by certain attribute codes are parsed correctly. * Popup menu items for active nicks (and active servers, etc.) now work correctly in the status window. Note that channel- specific items like Op and Kick won't work as expected since there's no channel, even though they aren't grayed out. * The ident server now returns the ports in the correct order. * SetEventLine now updates $nick, $user, and $host for the following events. * -before and -after events run in the correct order (highest to lowest priority). * $var++ and $var-- correctly update the variable on all servers. * Wallpaper and window backgrounds are reloaded when you click OK in the configuration window. * VSInterp: Fixed an obscure issue involving script access to methods and properties of COM objects (FuncDesc was released twice). * DCC Resume works when the sender is using mIRC 6.1+. * Fixed a scrolling bug for output windows with less than a whole page to show. * Fixed a server list saving bug. Changes since ViRC 2.0 RC4: --- Additions --- * Toolbar items can now have hotkeys. Put a clause like "hotkey Ctrl+X" after the item name in the toolbar block. * The timestamp and logging toggle buttons are now bound to F5 and F6, respectively. * Channels and query windows are now "deferred" until you stop typing for a second. They won't appear or receive focus until you stop; but they can still be accessed by scripts, and they show up on the window tab bar. This feature can be controlled with two new options on the initial setup page: "Don't pop up windows while I'm typing" and "Wait at least ____ ms after a keypress". The Query command will allow the new window to be deferred if you specify the -defer flag: /query -defer Mr2001 Otherwise, it will be shown immediately as before. TextOut and TextOutBitmap always allow query windows to be deferred if they have to be created to show the text. * New option: "Horizontal window tabs when docked to side". This prevents the buttons from rotating when the tab bar is docked to the left or right. * If "Alt+Number to switch windows" is enabled, the tab icons now change to numbers when the Alt key is held down. * Added support for Undernet's 338 numeric, which gives the real user@host and IP address for users with the +x mode. * New "Goto URL in new window" option on the hyperlink popup menu. This uses Exec to start IE. * New attribute code for fixed-width fonts: ASCII 17, Ctrl+F in the command line, or \f in scripts. This is compatible with Pirch's fixed width code. ViRC.lib now displays the server MOTD in fixed-width so ASCII art will look right. * New function: $IsHidden() * New command: Activate * New named events: changes to /CTCP. In channel windows, nicknames will be highlighted as they're completed. * New OVS classes: TDriveComboBox, TDirectoryListBox, TFileListBox, TFilterComboBox. * New extended With..EndWith syntax. First install a handler: ExtendWith [] = Then invoke it: With > [] EndWith The will be called with , and the content of will be available through a TStringList object, $__Block__. is a set (surrounded by square brackets) of these possible values: xwEvalParams - evaluate xwEvalBlock - evaluate each line of $__Block__ before invoking the command xwNewContext - run in its own local variable namespace instead of the same one where With..EndWith was used If is omitted, the default value is [xwEvalParams]. * OVS objects can be accessed through OLE Automation by using the IVSSprout::GetInterface method (see vircole.txt). This allows other applications and Language..EndLanguage blocks to control objects created by scripts. For example: Language VBScript Set mainform = VisualIRC.GlobalInterpreter.GetInterface(0) mainform.Caption = "This is a new main form caption" EndLanguage Please note: When one of your objects' methods is called through OLE, the parameters will be quoted as list items. See vircole.txt for more tips on writing classes that can be called through OLE. * OLE Automation interfaces can be mapped as OVS objects. See vircole.txt for full details. Quick notes: - OLE interfaces can be mapped one of two ways. (1) Another program, or your script in a Language block, can call IVSSprout::MapInterface. (2) You can create a new COM object with the $NewComObject() function, given its CLSID, as long as the object supports IDispatch. - The handle 1 is automatically mapped to an instance of IVisualIRC, the same interface available to Language blocks as "VisualIRC". - If $obj is an OLE interface, $ClassOf($obj) returns "IDispatch" and $ParentClassOf($obj) returns "IUnknown". - Indexed properties can be used by surrounding the index(es) with square brackets after the property name: $prop(1.Servers [4]) - All parameters to an OLE method, including parameters for an indexed property, must be individually quoted as list items. * You can now send DDE commands to ViRC by poking data as well as by executing a macro (for compatibility with programs written for other IRC clients). Use the topic 'command' and the item name 'IRC_Command'. See vircdde.txt for details. * Increased $ovsversion to 9 because of the new OLE support. * New 'Parse List' statement, just like 'Parse Extended' but it cleans up the list first and strips quotes from the single items ($1 is the second item without quotes, $1- is the second item and all following items including quotes). Example: @l $list = "albert bill" charlie "dave evan" Parse List $list // displays: albert bill MessageBox $0 // displays: charlie "dave evan" MessageBox $1- EndParse * ViRC will create a temporary server entry when you connect to a server that sends its capabilities in the 005 numeric. The temporary entry will not be saved to disk by default. If you want to keep it, you can open the server manager and move it to a network. * The OnCloseQuery event of forms can be used to prevent the form from closing. Use '@L $CanClose = 0' in the event handler if the form shouldn't be closed. * TTrayIcon (e.g. $MapObject(!Main:TrayIcon)) has two more properties: Flashing (Boolean) and FlashTime (Integer). When Flashing is True, the tray icon will flash every FlashTime ms. * New function: $IsAppActive() returns 1 if ViRC is the active program. * New command: FlashTaskbar [mode]. Mode can be "on" (or 1) to highlight ViRC's taskbar button, "off" (or 0) to un-highlight it, or "auto" to highlight it until ViRC becomes the active program. ("off" may not work correctly due to Windows API bugs.) * New ViRC.lib script settings to flash the taskbar and/or tray icon when new messages arrive and ViRC is in the background. * The "text windows" configuration page now contains a nick list color/style editor. * The nick list can now display your channel background image. * ViRC.lib automatically sets up the smileys.vsc and sounds.vsc add-ons for first-time users, as well as winamp.vsc if Winamp is running when ViRC is started. * TTreeView is now accessible from OVS (as well as TTreeNodes and TTreeNode). Most properties and events are supported. --- Changed features --- * Nicklist flag colors are now saved in color scheme files. * English messages from ViRC.lib and toolbars.vsc have been moved into english.lib to facilitate translation. You can use english.lib as a base for translating ViRC.lib's messages into other languages. * Relative path names can be used in embedded TextOut bitmaps (\S@bmp:smile.bmp:alt text\S) and script link bitmaps (\S@slbmp:smile.bmp:command:alt text\S). * The channel list window is no longer modal. You can select another window while the list is open, then switch back by clicking the channel list's window tab. * The error message displayed when you try to change your nick while banned/gagged on a channel now shows the channel name. * Some configuration pages have been re-arranged. * Color names are now more friendly on the "text windows" configuration. * ViRC.lib now fires ) type - mtWarning, mtError, mtInformation, mtConfirmation, mtCustom buttons - set of [mbYes,mbNo,mbOK,mbCancel,mbAbort,mbRetry, mbIgnore,mbAll,mbNoToAll,mbYesToAll,mbHelp] (no spaces!) To create a message dialog and show it later, use code like this: @ $sure_dialog = $new(TMessageDialog Are you sure? mtConfirmation [mbYes,mbNo]) ... @l $result = $sure_dialog.ShowModal() The return value of ShowModal() is the same as the return value from $MessageDlg(). You can set the dialog's ModalResult property to a nonzero value to close the dialog without user input (e.g. from a timer). --- Changed features --- * You can select more than one file in the DCC send dialog box. * $nicklist(), $oplist(), $peonlist(), etc. now quote the nicks as list items, so nicks with \\ in them will work correctly. (They were previously separated by spaces but not quoted. You can use $ListJoin() to change them back.) * $StrTrim() now removes leading spaces before the colon. * Closing the channel list before it's finished searching will send a 'LIST STOP' to the server (when server-side searching is enabled). * The number of repeats is now optional for /timer and /mtimer. If you leave it out, it defaults to 0 (infinite repeats). * Added COM, PIF, DOC, XLS, and SHS to the default "dangerous file extensions" list. * $listquote() now prefers to use angle brackets instead of quotes. * DCC chat popups now receive the unique DCC window name as $C and $2. --- Bug fixes --- * smileys.vsc won't replace smileys that occur inside a word, like "Fserve trigger:(!foo) Queue:(3 of 3)" * Leaving the server selection box empty when you have no default server won't cause problems. * Alt+Number switching should work correctly with non-US keyboards. ViRC now checks whether you are holding down Ctrl at the same time, since AltGr is supposed to send left Ctrl + right Alt. On a US keyboard, you should be able to use either Alt key to switch windows. * AbortEvents won't display the raw server line. * The master script browse button in configuration works relative to the script path. * Fixed an array bug - @ $x = y, where $x has previously been used as an array, should work correctly. * Min and Restore work as expected when 'minimize to tray' is enabled. * A space is only copied to the clipboard for table columns when it's after the beginning of the line. * Duplicate nicks are no longer added to the notify list. * After double clicking the tab bar to hide a window, the next highest window will be activated. * Fixed an EConvertError during auto-reconnection. * Fixed an error when loading files into the script editor. * Fixed "view log" popup menu item. * Fixed a couple stability issues from RC2. * Fixed IAL expiration. * Fixed $upeval(). * Fixed changing events on objects that are mapped more than once. * Fixed errors when opening the script editor when the script path is not the current directory. * The Undo/Copy/Paste popup menu is back for input panes. * Most forms are now loaded as they are needed, reducing initial memory usage and decreasing startup time. * Built-in forms that haven't been loaded will be loaded when they are mapped with $MapObject(), instead of returning -1. * The 'GetMenuTreeList' method of TStrings lists user-defined menu trees. ? Fixed script editor not saving to correct file if directory has been changed. * Channel control window: Halfops can change topic. Peons can read and copy the topic even if they can't change it. Changes since ViRC 2.0rc1: --- Additions --- * Event options to run before/after other events, use variables in the activation mask, and more. New event definition syntax: Event [-before|-after] [-eval] [-exact] [-case] [-regexp] "" EndEvent -before: the event will run before the event's message is displayed (either internally or by a priority-matching event). all matching 'before' events will be run in the opposite order they were added (that is, newest first), unless one of them calls FallThrough, which will skip all remaining 'before' events. -after: just like -before, but runs after the message. the order is still newest first. this shouldn't be combined with -before. -eval: the mask will be evaluated when it is being matched against a server line (caution: if you put a function call in the event mask, the function will be called A LOT). use this to match your current nick, for example, instead of the nick you had when the event was defined. -exact: the mask will have to match the entire server line. that is, "% JOIN" will not match ":Mr2001 JOIN #virc" if -exact is used. also, the event mask won't be evaluated when the event is set, although it will still be evaluated at match time if -eval is used. -case: the mask will be case-sensitive. -regexp: the mask is a unix-style "regular expression" rather than a $wildmatch() mask. any subexpressions enclosed in parentheses will be available to the event handler in the $matches array: the mask ":\w+ PRIVMSG (#\w+) :(.*)" will put the channel name in $matches[1] and the message in $matches[2]. the mask will not be evaluated when it is set, since some regexp syntax collides with ViRC's attribute codes. * New commands: 'SetEventLine ' and 'AbortEvents'. SetEventLine lets an earlier event change the parameters that will be given to later events. AbortEvents stops event processing after the current event finishes. For example, to ignore all /msgs from Mr2001, and change everything LuceNT says to uppercase: Event PRIVMSG_test -before "% PRIVMSG" if [$nick] == [Mr2001] AbortEvents else if [$nick] == [LuceNT] SetEventLine $0 $1 $2 :$upper($strtrim($3-)) endif EndEvent * New function: $upeval() evaluates the text in the previous local variable context, so a called alias can access its caller's local variables. (This is used by @e+ and @e-.) For example: Alias FOO @l $secretnumber = 17 Bar EndAlias Alias BAR MessageBox The secret number is $upeval($$secretnumber). EndAlias * New OVS event utilities (in virc.lib): // add an event handler to an object. any existing handlers will // still run, but this will replace an existing handler with the // same ID (first_box). @e+ $button.OnClick = first_box, MessageBox You clicked the button! // add another, now both boxes will appear when you click it @e+ $button.OnClick = second_box, MessageBox You clicked at $time() // remove the first handler @e- $button.OnClick = first_box // list all handlers foreach ($id,$code; $eventhandlers($button.OnClick)) MessageBox handler "$id" runs "$code" endforeach * The server list can now be mapped as !ServerList. * CTCP SOUND support is now included as an add-on script, sounds.vsc. * '@ ${foo} = bar', '-@ ${foo}', etc. are supported. * https:// and irc:// URLs are highlighted. * New function: $replace( [ ...]) returns the text after replacing each "from" string with the corresponding "to" string. All parameters must be quoted as list items, and they are case sensitive. The replacement is done on a single pass through , so $replace(ABC A X X Z) will return "XBC", not "ZBC". $replace(ABCD A foo ABC bar) will return "fooBCD", not "barD", because the leftmost from/to pairs are replaced first. * Inline graphics for text windows: \S@bmp:filename[:alt text]\S If supplied, the alt text will be copied to the clipboard when the graphic is selected. You can also make a graphical script link: \S@slbmp:command:filename[:alt text]\S can be either a FULL PATH to the bmp file, or a bitmap handle returned by $bitmap(filename.bmp). ViRC will automatically look in your image path if you use $bitmap(filename.bmp). * Tables for text windows. These are basically like custom tab stops; there are separate commands to create a table definition, select an active table, and move to the next column within a line of text. All the commands are used by outputting them to a text control, so tables should be defined in , not . define (or redefine) a table: \S@td::[::...]\S - Name must be a single word. A table only has to be defined once, then it can be used in any window. Each sets the width of a column; it can specify pixels ('50px'), characters ('25ch'), or let ViRC choose a size ('?'). The /f flag ('50px/f', '25ch/f') tells ViRC not to resize the column, even if some text won't fit. (re)define a wrappable table: \S@td/w::[::...]\S - Just like regular @td, but text shown with a wrappable table is allowed to wrap to the next line. select a table for one line: \S@uset:\S - This must appear at the beginning of the line. The named table definition will be used for this line only. select a table for several lines: \S@pusht:\S - The named table will be added to the top of the "table stack", and it will be active until it is removed with @popt. Each window has its own table stack. display text with columns: \S@col\S - Moves to the next table column before displaying the text. The previous column may be resized if it wasn't defined with /f and if the text that has already been displayed is wider than the column's original size. unselect a table: \S@popt\S - Removes the most recently selected table from the stack. unselect all tables: \S@popt/a\S - Clears the table stack. When the stack is empty, the default table (set with @setdeft) will be used. set a default table: \S@setdeft:\S - Sets the named table as the default table, so it will be active whenever the table stack is empty. ViRC.lib uses a default table to line up nicks, so you should only change the default table if you know exactly what you're doing. * New function: $GetTimerServer() returns the ID of the server that the timer is associated with, or -1 if not found. * The script editor has buttons for event options and menu tree merge options. If your script uses MergeMenu and you want the script editor to recognize it, rename the source tree to the destination tree's name followed by __MERGE (e.g., MT_MAINMENU__MERGE), then move the MergeMenu line immediately after the last MenuItem for the tree. * ViRC will be drawn with themes under Windows XP. * New included scripts: sounds.vsc (handles CTCP SOUND) and smileys.vsc (shows graphical smileys). * ViRC.exe now includes 48x48 icons. * New exception handling for scripts. Now you can catch errors that come up when working with files or OVS: Try @l $filename = $?="Enter a filename" $stringlist.LoadFromFile $filename Except if [$ExceptClass] == [EInOutError] MessageBox I/O error prevented me from loading the file: $ExceptMsg else MessageBox Unexpected exception: $ExceptClass was raised at $ExceptAddr ($ExceptMsg) endif EndTry Use a 'finally' part to run some code whether an exception was raised or not. You can omit the 'finally' or 'except' part, or both (to ignore all exceptions). @l $cur_dir = $GetCurrentDir() Try ChDir $getpath() MkDir $?="Enter a new directory name" Finally ChDir $cur_dir Except MessageBox Couldn't make new directory: $ExceptMsg EndTry In an 'except' part, you can reraise the exception, so it will be caught by an outer Try..EndTry statement, with the Raise statement. Or you can raise your own exceptions at any time: Alias OUTER // ignore any exception that occurs in Inner1 Try Inner1 EndTry EndAlias Alias INNER1 Try Inner2 Except // display "Inner1 caught Exception - an exception from Inner2" MessageBox Inner1 caught $ExceptClass - $ExceptMsg // re-raise the exception for Outer to catch Raise EndTry EndAlias Alias INNER2 Raise an exception from Inner2 EndAlias * A scripted popup menu now appears when right-clicking a web hyperlink, allowing you to either go to the URL or copy it to the clipboard. This makes use of TMS's new OnHyperlinkPopup event. * New command: CacheBitmap . You can replace ViRC's built-in TextOut images by using a 'name' of _join.bmp, _part.bmp, etc. 'hbitmap' is the value returned by $bitmap(filename.bmp). * New event: , called at startup and after FlushBitmapCache. This is a good place to replace built-in bitmaps. * ViRC.lib will automatically replace the built-in join/quit/etc bitmaps with any corresponding files it finds in your image path: _join.bmp, _part.bmp, _joinign.bmp, _partign.bmp, _quit.bmp, _nick.bmp, _mode.bmp, _topic.bmp If you release a color scheme for 2.0rc2 with new bitmaps, you can simply include these files in an image folder, and reference it in your scheme file. ViRC.lib will notice when you change your image path and automatically recache the bitmaps.+ * ViRC.lib notices when you change your script path or filenames in client setup, and automatically rehashes. --- Changed features --- * File dialog boxes ($opendialog(), etc.) now start in the current directory. * Built-in menu trees in the script editor are now merged by default. This means you can add items to a menu simply by, well, adding them. * The script editor shows a warning when you omit an event mask. * RightAlt+Num no longer switches windows, since right Alt is used for typing symbols on non-U.S. keyboards. Use left Alt instead. * The server list and server import/export forms are now resizable, and the tree views won't expand automatically if there are more than 15 items to show. * Opening server windows is faster. * String expressions can now use nested square brackets: if [$array[$key]] == [foo] ... endif @l $x = [] if [$x] == [[]] MessageBox Naturally! endif --- Bug fixes --- * Fixed an array parsing bug. * MergeMenu now copies hints correctly. * Making the server hostname edit box empty, or calling /server with no parameters, will now connect to the previous server instead of giving an error. * The userlist loads correctly from INI files. * $listquote() now escapes strings containing tabs and CR/LF. * The script editor doesn't prompt to save when you view a menu item without making any changes. * The script editor won't write a MenuTree block if the only item is . * $GetWindowID() works for all window types. * is fired when closing a DCC chat window. * '^Msg =nick text' correctly hides any text displayed by . * The DCC progress bad should appear correctly for large files. * !Application's Active property is now readable. * UltimateIRCD's "channel admin" flag (*nick) won't confuse ViRC's nick list. Changes since ViRC 2.0pre11: --- Additions --- * -@L command to delete local variables and local array entries. Local variables and arrays are still deleted automatically when the routine finishes, so this is mainly useful for removing values from local arrays. * You can now switch between the first ten windows by pressing Alt+1 through Alt+0. Alt+1 jumps to the first window on the tab bar, Alt+2 jumps to the second, etc. * New aliases in virc.lib: /onall to run a command on all servers, /aasay and /aame to do /asay and /ame on all servers. * The script editor now supports custom magic in menus. * Color and font schemes can now be saved and loaded on the "Text windows" configuration tab. If you download schemes, save them in your image path. Schemes can also include image and sound folders. To distribute your images and sounds as part of a scheme, open the scheme file with a text editor. Add a section at the bottom: [Paths] ImagePath=somename-images SoundPath=somename-sounds (You don't have to include both an image path and a sound path. Replace 'somename' with the name of your scheme.) Then put the scheme file (somename.colors), along with image and sound folders (somename-images and somename-sounds), in a ZIP archive to upload it. * New $ParamList() function to return a list of parameters passed on ViRC.exe's command line. * Command-line support for loading scripts (-loadscript filename.vsc), editing scripts (-editscript filename.vsc), importing server lists (-importservers filename.vsl), opening connections from a file (-chat filename.chat), editing connection files (-editchat filename.chat), and deleting settings (-uninstall). * ViRC now has an installer to create icons and register file types. The /irchyperlink alias will be called when an irc:// URL is activated from Explorer. * You can now choose to save to an INI file from the setup wizard. * ViRC's TApplication object can now be mapped as !Application. Useful properties: Active (boolean), ExeName (string), Handle (HWND), HintColor (color), HintHidePause (integer), HintPause (integer), HintShortPause (integer), ShowHint (boolean), Title (string). * New "codeedit" script control type. A syntax-highlighting script code editor will appear. $getsetting() returns a list of lines in order. * New "perform on connect" script setting for networks and servers. * Inflated windows stay inflated when resizing the main ViRC window. Clicking the maximize button of an inflated window returns it to the size it had before it was inflated. * New default colors and built-in bitmaps. * Special cursors for hyperlinks and script links. --- Changed features --- * New-style arrays ($array[$key]) have been optimized and are now as fast as old-style arrays. Adding or removing values may cause the order of items in $array to change. Old-style arrays ($array.$key, or any variable with a . in the name) are now deprecated and should no longer be used in new code, since a future version will not support them. * The incorrect syntax '-@ $foo $bar' no longer deletes $foo. * Server list files (.vsl) can now contain comment lines starting with //. * The script log now shows function results. * The setup wizard has been improved. * Nonprintable characters and backslashes are no longer allowed in variable names. * Credits sequence changed. --- Bug fixes --- * Default paths are used correctly in the configuration window. * No more I/O error when closing a reverse DCC send that is waiting for a response from the receiver. * The script editor appears correctly on systems with large fonts. * Fixed virc.lib's DCC auto-accept settings. * Fixed winamp.vsc bug causing crashes with certain song titles. * Calling TextOut in some situations used to create a query window called "$C"; now it is redirected to the server window. * No more 64 KB limit in INI files. * Minor bug fixes in the text scroller. * Custom magic works on the main menu. * Unused menu entries are correctly deleted; this solves a bug with replacing menus containing custom magic. * Hyperlinks are now marked more reliably. Changes since ViRC 2.0pre10: --- Additions --- * User-defined classes can now use and as generic property handlers, which will be called if you try to read or write an undefined property. * New client setup page for default download, upload, sound, image, log, and script paths. Please note that the download, upload, and log paths default to your "My Documents" directory, not the ViRC directory. * Scripts now have a standard way to store and play sound files for events: AddEventSound "" "" [default <file>], DelEventSound <name>, PlayEventSound <name>, $EventSoundList(), $GetEventSound(<name>), $GetEventSoundFile(<name>), SetEventSoundFile <name> <file>, $IsEventSoundSet(<name>). Items added with AddEventSound appear on the event sounds page in client setup. PlayEventSound can also be called as a function, returning 1 if the sound was successfully played. * New command to play sound files: PlaySoundFile <file>. This can also be called as a function, returning 1 if the sound was successfully played. * InternalCall now works for many event types other than TNotifyEvent, so you can hook into ViRC's events such as OnClose and still use the default handling. Any parameter values for the event will be taken from variables (such as $Action for OnClose), and any output parameters will be written back to the variables. * New command to run an alias in the current local variable context: Chain <alias> [parameters]. All the local variables from the current routine will be passed to the alias, and any changes made by the alias will be visible to the current routine. This is useful for chaining OVS event handlers: @l $old_handler = $prop($obj.OnKeyDown) @p $obj.OnKeyDown = _NEW_KEYDOWN $old_handler ... Alias _NEW_KEYDOWN ... Chain $1- EndAlias * New function $ShiftKeys(), returning a set of control keys that are currently held down. Possible keys are lshift, rshift, lctrl, rctrl, lalt, ralt, lstart, rstart, and context. 'shift' will be included if either shift key is down; 'ctrl', 'alt', and 'start' work similarly. * ViRC.lib changes: Auto-connection will not be performed if you hold Ctrl down while starting ViRC. Auto-joining will not be performed if you hold Shift down while connecting to a server. New script settings "Auto-accept DCC chat", "Auto-accept DCC send", "Auto-resume DCC send", and "Dangerous file extensions". Logging menu items on server/channel/query/chat windows. * Buttons on the tab bar are now grouped by server and window type. * New methods for TStrings: SaveToToolbar <name> <options>, LoadFromToolbar <name>, SaveToToolbarItem <item> on <bar>, LoadFromToolbarItem <item> on <bar>. LoadFromToolbar can be called as a function ($stringlist.LoadFromToolbar(TB_WINAMP)) to return the options needed to recreate the toolbar. * winamp.vsc changes: Added commands /zz, /zj, /zk, /zl. Added Winamp toolbar. See winamp.vsc for documentation and options. * New function $ListUnique(<list>), returning the list with duplicate items removed. * Rewritten configuration code: New option "Save to INI file" in configuration window. The server list is now stored in a file. New commands: SetSetting [path] <key> = <value>, SaveConfig. SetSetting can operate on either config settings or script settings (like $GetSetting()), but any changes will be temporary unless SaveConfig is called afterwards to write the settings to the registry/INI file. * New command to add items to a menu tree: MergeMenu <source> {before|after} <destination> <options>. Options can be a space-separated list of 'addsep', 'noaddsep', 'clobber', 'noclobber', 'move', and 'nomove' (all three are turned on by default). Addsep controls whether a separator is added between the old items and the new items, clobber controls whether old items are replaced by new items with the same name, and move controls whether old items are rearranged to the order they appear in the source menu. * The script editor now prompts to save files that have been modified. * OLE Automation support - see vircole.txt for details. * ActiveScripting blocks now have access to the current window's Automation object ("Current", implementing IServer, IChannel, IQuery, IDCCChat, or IWhiteboard) as well as ViRC's object ("VisualIRC", implementing IVisualIRC). * New custom magic types for menu definitions, so items can be enabled or disabled at runtime. Instead of a number 0..3, you can also use '$varname' (so the item is enabled when the variable is nonzero) or '%funcname' (calls the function with <windowname> or <nicks> <windowname>, item is enabled when the result is nonzero). These forms can also be used with variable or function references: !$varname enabled when variable is false &$varname enabled when the menu's regular criteria is met (e.g., you are opped) AND the variable is true |$varname enabled when the menu's regular criteria is met OR the variable is true &!$varname enabled when the menu's regular criteria is met AND the variable is NOT true !&$varname enabled when the menu's regular criteria is NOT met AND the variable is true !|!$varname enabled when the menu's regular criteria is NOT met OR the variable is NOT true and so on. * New custom magic types for toolbar button definitions. Instead of a state number 0..3, use state number 5 and include 'magic <token>' before the state, where <token> is a variable or function reference as described above. For example: T_CHANCTL magic $enablechanctl 0 "tbchanctl.bmp" | Channel control * New command UpdateMainMenu, to apply magic to the main menu and toolbar items. (Magic will only be applied when the command is called.) UpdateMainToolbar is a synonym. * New function $isobject(<value>) to determine whether the value is a valid object handle. New function $proplist(<object>) to list properties. * You can now use the -nosplash command line parameter to disable the splash screen. * New events: <OnMinimizeToTray> and <OnRestoreFromTray>. ViRC.lib uses these to display a private message count while minimized. * The help menu now shows DOC files. --- Changed features --- * ViRC will not try to reconnect if you use /server to connect to a hostname that can't be resolved, but it will try to reconnect if it encounters an unresolvable hostname during reconnection. * The ident socket is only bound while ViRC is waiting for a server to connect to it (unless "Answer for other programs" is enabled). Ident should now work correctly with multiple instances of ViRC running. * $GetPath() now accepts an argument: 'download', 'upload', 'log', 'script', 'sound', 'image', or 'virc'. $GetPath() with no argument is the same as $GetPath(virc). * If a script file can't be found in the specified location, but it can be found in ViRC's directory, ViRC will show a message but won't automatically load the scripts from its directory unless you press OK in the configuration window that appears. * The default personal script filename for a user profile is now local-<profile>.lib. (Create new user profiles by making shortcuts to 'ViRC.exe -user <profilename>'.) * Magic modes 1 and 2 for MT_TRAYPOPUP items now cause the items to be enabled (or disabled, respectively) when ViRC is minimized. --- Bug fixes --- * $([foo] == [bar]) was slightly broken by the new array syntax. * Small bug with matching server entries fixed. * $GetMenuHint() and SetMenuHint are now case-insensitive. * Italic text is displayed properly with non-TrueType fonts. * Toolbars are repositioned correctly after reloading the script. * Fixed closing a server window while a $getaddress() or DNS lookup was pending. * Toolbar buttons with mode 1 (enabled when opped) are enabled when you join a channel and receive ops automatically. * Random/sequential reconnection option is stored correctly. * "Cancel reconnect" button appears in the correct place. * ViRC minimizes to the tray correctly when the context menu for the taskbar icon is used. * Setting a timer for a command that uses the built-in channel tracking (e.g., /timer 5 1 say hello) works correctly. * Redefining a toolbar to appear on fewer window types will correctly remove it from the old windows. * Aborting DCCs now closes the file reliably. * The notify list is emptied when disconnecting from the server. Changes since ViRC 2.0pre9: --- Additions --- * Visible controls now have the Parent property available. This could be used to move built-in controls into a group box or tab sheet. * TListBox, TComboBox, and TListView now have an ItemText property. For TListBox and TComboBox it's equivalent to the ItemIndex'th element of the Items list; for TListView it's equivalent to the Caption property of the Selected item. * Server tab buttons now show "connecting" while waiting to connect. * A gratuitous credits display is hidden in the about box. * DCC entries now stay in the list after an error occurs. * $GetDCCInfo() has two new fields: errnum and errmsg. 'state' can also return 'error'. * New '@e' command to set one-line event handlers. For example: @e $form.OnMouseDown = MessageBox $Button Now when you click the form, you will see a message saying "mbLeft" or "mbRight" depending on which button you used. Note that the $Button is evaluated when the event handler runs, not when it's set (as with @p). This is equivalent to: @p $form.OnMouseDown = Eval MessageBox $$Button ... but it makes more sense. * New <default> event for server lines that aren't handled by anything else. New "show unrecognized server numerics" script setting, to show the entire unrecognized line. * New associative array syntax: @ $foo[key1] = value1 @ $foo[key2] = value2 @ $foo[key3] = value3 MessageBox $foo[key2] -@ $foo[key1] // when the key contains brackets, $, etc... @l $temp = ]special characters[ @ $foo[$temp] = value4 foreach ($key, $value; $foo) MessageBox key: $key, value: $value endforeach // stored array @s $stored[key] = value -@s $stored[key] // local array @l $local[key] = value * New functions for arrays: $ArrayKeys($array), $ArrayValues($array), $ArrayLength($array). These only work with arrays created with the new syntax as shown above. * ViRC now automatically checks for updates 5 minutes after you start it. You can disable update checking or change settings in client setup, and you can force it to check immediately with /checkforupdates or the file menu item. * New functions: $URLEncode(text), $URLDecode(text). URL encoding replaces space with '+' and all other non-alphanumerics with '%xx', where xx is the hex code. Decoding is the opposite. * New function $MD5(text) to return an MD5 digest. The digest is a 128-bit fingerprint of the input text, given as 32 hex digits. The chances of two separate texts having the same MD5 digest are one in 2^128. * New function $ParseColor(string [type]) to get a color's RGB value. <string> can be an mIRC color number (0-15), a hex color in the form $BBGGRR, a decimal color (as returned by $prop($obj.Color)), an event color name like ecJOIN, or a color name like clGreen. <type> can be 'dec' to return it as a decimal color (for use with @p $obj.Color or with TextOut) or 'hex' to return it as a hex color in the form RRGGBB (for use with \d). 'hex' is the default. * ViRC will try to reconnect to the server if the connection is lost. You can adjust the delay between attempts (and other settings) in client setup. ViRC can also try other servers on the same network if enabled. Note that disconnecting with '/raw quit' will make ViRC think the server disconnected you, and it will try to reconnect. * New "don't hop away" server list option. If reconnection fails on a server with the option enabled, ViRC won't try other servers from the same network. However, if ViRC was trying the "don't hop away" server because reconnection failed on a different server, it will still hop away. * ViRC's tray icon now has a customizable popup menu (MT_TRAYPOPUP). --- Changed features --- * <OnStart> events are now run after the toolbars are set up and the splash form is hidden. * The script editor no longer saves menu items that have no code. This means you can add items in local.lib without having to copy all the code from virc.lib. * The server debug log now contains all text that is sent or received. 'recv' marks a received line, 'send' is a sent line, 'send_brk' is a sent line that is broken to avoid DCC proxies, and 'send_idle' is a sent line that doesn't reset $idletime(). If you use debug logging, make sure you edit any passwords out of your logs before you send them to anyone. * Channel, query, and DCC chat window positions are now stored with an MD5 digest of the network and channel/nickname instead of the actual plain text. This prevents others from looking in your registry to see who you've talked to, and also lets you have separate positions for the same channel on different networks. * The 'News and updates' link has been removed from the about box. --- Fixes --- * DCC requests are always sent correctly with reverse DCC enabled. You can also send DCC when SOCKS is enabled, as long as reverse DCC is also enabled. * No more errors when using /exit with queries or channels open. * Major DCC bugs fixed. * Menu definitions can now have spaces before the bitmap filename. * Fixed hexadecimal values in expressions. * Errors in ActiveScript language blocks are handled better. * GetVar() in ActiveScript code now works correctly for numbered parameter variables. * $getwindowid() now works in <OnCreateWindow> for all window types. * Timers are now disabled correctly when the timer command takes longer to run than the timer interval. * Importing ViRC 1.x settings now works correctly when there was no server list defined. * Ending color codes now correctly clears the background color. * Leaving the personal script filename blank is now acceptable. Changes since ViRC 2.0pre8b: --- Additions --- * ViRC can now autoload more than one script at a time - a master script (virc.lib), a personal script (local.lib), and multiple add-on scripts (winamp.vsc, etc.). You can now install an add-on script simply by adding it to the list on the configuration window's Scripts page and rehashing. * The script editor now has a "New" button, and loads the personal script by default. * New 'server list' button in toolbars.vsc. * New channel list window. Try '/list *mp3*' or just '/list'. The list can be loaded and saved to a file, using the same format as mIRC. Right-click on a channel to get a menu. * New /who window, accessible with /wwho or /windowedwho. Try '/wwho' to get a list for the active channel, or '/wwho #virc' for another channel. You can also double-click on a channel in the /list window to see who's on. * '/clear -h' or '/clear #virc -h' can now be used to clear the input box history. * The server notify list and channel nick list can now be resized by dragging the border between the output pane and list box. * Scripts can now create tray icons with the TTrayIcon class. Properties: - Active: Boolean - Hint: string - Icon: TIcon - PopupMenu: TPopupMenu Events: - OnClick - OnDblClick - OnRightClick ($Shift, $Button, $X, $Y) * If you move ViRC to a new directory and it can't find the scripts (the old paths are saved in the registry), it will look in the new location of ViRC.exe. If it finds them there, it will load the files and update the settings. * Scripts can now use TListView, which is the control used in the ban list, /who list, and Explorer windows. The actual implemented classes are TListView, TListItem, TListItems, TListColumn, TListColumns, and TImageList. See ovs.txt. * Scripts can use TCanvas to draw on forms and some controls. This also means owner-draw list boxes and list views are available. * A color palette now appears when you start typing a color with ctrl-K. * Attribute codes (^B, ^K, etc.) now work for the real name and default messages settings in configuration, and for the topic in channel control. Scripts can use TInputCombo for a combo-box that allows attributes. * New reverse DCC support for firewalls, compatible with mIRC. Enable "Use reverse DCC" on the DCC settings page. Note: This won't work if both users are behind different firewalls. Special note to Khaled: Please put more thought into your next invention. * When reverse DCC is enabled, ViRC will attempt to trick some proxies that intercept DCC requests (specifically, the one at my apartment complex that inserts the wrong address). * The setup wizard is now implemented. Choose "I'm new to IRC and I want detailed help" on the import settings form for new users. * New function: $SameNick(nick1 nick2). Considers [ the same as {, \ the same as |, and ] the same as }, like ircd. * New commands/functions for DCC management: $DCCList() returns a list of DCC list entries DCC Accept <entry> [filename] DCC Resume <entry> <offset> [filename] DCC Reject <entry> $GetDCCInfo(<entry> <key>) where key is chatform (returns a mapped object handle), chatwin (returns a window name like =1), filename, id, kind (chat/send/tsend/get/tget), mynick, myport, nick, origfilename, remoteaddr, remoteport, reverse, reversetoken, server (returns the server ID), servername, socket (returns a mapped object handle), startpos, starttime (compare to $mtime()), state (request/connecting/connected/waiting/resuming/socks), totalsize, transferred, or whiteboardform (returns a mapped object handle) Note that when an incoming request is accepted, the request entry is deleted and a new entry is created to connect. Firewall DCC entries are similarly recreated during connection. * New events for DCC: <OnDCCConnect> ($0 = chat/send/tsend/get/tget, $1 = DCC entry ID) <OnDCCFinished> ($0 = chat/send/tsend/get/tget, $1 = DCC entry ID, $2 = socket error number, $3- = error message. error number is 0 if completed or -1 if aborted.) * Ident and DCC socket errors are now shown on the main status bar. --- Changed behavior --- * Menu bitmaps will now be made square when they're loaded, by setting the width to be the same as the height. This means you can use the same bitmaps for menus and toolbars if the toolbar bitmaps have disabled versions. * New users now have "strip attributes from logs" turned on by default. * ViRC no longer freezes while looking up the server's IP address. * Menu items aren't forgotten when the menu tree is updated, so you don't have to duplicate the code for the entire menu just to add one item. * No more AddNickToChan/RemoveNickFromChan errors. --- Fixes --- * The tile and cascade buttons in toolbars.vsc now work correctly. * The tray icon refreshes itself automatically if Explorer crashes. * The server toolbar is correctly updated after an error causes the server to disconnect. * The internal QUIT event now works correctly if the server doesn't send a reason. * The new TDCC handshake is now actually implemented. * Continuous backgrounds work correctly with toolbars, and turning continuous backgrounds off works as expected. * ViRC now looks in its own directory for menu/toolbar images if no path is given. * Incoming messages and notices directed to the ops or voices of a channel (@#virc, +#virc, @+#virc, etc.) are now shown in the correct window. * Logging for nicks with \ in them works correctly. * The ident server is now much better behaved. * IAL expiration should be faster in large channels. * Nicks are now compared correctly ('{' is the same as '[', etc.). Changes since ViRC 2.0pre8: --- Additions --- --- Changed behavior --- * Exceptions caused by scripts are handled differently. Functions that raise exceptions will return an appropriate message. * The upgrade message will now go away even if the configuration can't be saved completely. --- Fixes --- * Menu bitmaps work correctly. * Class definitions with blank lines work correctly. * Switching between OVS-created MDI children doesn't give errors. * Destroy/SafeDestroy no longer explicitly close forms. This will prevent errors when a form's OnClose handler destroys the form. * Calling methods of user-defined classes no longer loses local variables. * List items quoted with angle brackets are now extracted correctly. * '/dns www.yahoo.com', with an extra space after /dns, works correctly. Changes since ViRC 2.0pre7: --- Additions --- * RGB color codes are now supported, a la Bersirc. Press ^L (or use \d in a script), followed by a RRGGBB hex color code (like HTML). A comma separates the foreground and background colors. * ViRC can now be set to recognize ^V as inverse colors instead of italics. It will always recognize ^R as inverse, and now also always recognizes ^] ($char(29) or \s) as italics. Pressing control-N or control-R will insert the correct italics or reverse code whether compatibility mode is on or off. New users will default to new color mode, existing users will default to compatibility mode. * New text window options: "old italic compatibility mode" and "script link merge mode". * New versions of a few string functions to allow tokens/substrings with spaces (just quote the token as a list item): $StrPosEx(), $StrPosFromEx(), $StrTokLEx(), $StrTokREx(), $RStrPosEx(), $RStrTokLEx(), $RStrTokREx(). * New versions of pattern matching functions to allow patterns with spaces (quote the *text* as a list item): $WildMatchEx(), $WildMatchCaseEx(), $GlobMatchEx(), $GlobMatchCaseEx(). * Ctrl-enter can be used to type multiple lines in the input box and send them all at once. * The script editor gives a warning when it loads a file where code between aliases/events/menus will be lost. * /wallops has been added as a built-in command. * New variable $exebuild to return the build number of ViRC.exe. This can be found by opening ViRC.exe's properties and looking at the version page; if $build is 200 and $exebuild is 42, the file version will be 2.0.0.42. * New command: Inflate [window]. This makes the window as big as possible without maximizing it, so switching windows will be faster. If no window name is given, all windows will be inflated. Clicking a window's maximize button will now inflate it instead of maximizing (turn off "maximize button inflates" to go back). * New function $ListCat(<item1> .. <itemN>) to append list items. This will be faster than appending them as strings when the new script engine is in. * Screen information can now be retrieved by mapping !Screen: see the properties ActiveControl, ActiveForm, DesktopHeight, DesktopLeft, DesktopTop, DesktopWidth, Height, Width, HintFont, IconFont, MenuFont, and PixelsPerInch. * ViRC will strip out the PGP headers when loading a script that has been digitally signed with PGP. It will not verify the signature itself, though. If you sign a script, make sure to keep the original script text intact - you can do this by opening it in a text editor and signing it with PGPtray, *not* by using the PGP right-click menu in Explorer. Make sure you have "word wrap clear-signed messages" turned off in PGP's email options. * DCC Whiteboard is back, and much more powerful. See vircwb.txt for details on how to control the whiteboard from scripts. This whiteboard is compatible with ViRC 1.x's whiteboard, but some features will be unavailable (the 1.x user may see "CAN use-wb2" as ViRC 2 tries to negotiate this). * New commands/functions to interact with other windows: $FindWindow("class" ["title"]), $SendMessage(<hwnd> <msg> <wparam> <lparam>), $GetWindowText(<hwnd>), SetWindowText <hwnd> <text>. * New commands/functions to allocate and edit memory, intended for use with SendMessage or DLLs (ViRC may crash if you don't know what you're doing): $GetMem(size), FreeMem <ptr>, PokeLong <ptr> <offset> <value>, and $PeekLong(<ptr> <offset>). PokeWord, PokeByte, PeekWord, and PeekByte are also available, and PokeString/PeekString can be used for C-style strings. * New persistent DLL support with $LoadDLL(<filename>), FreeDLL <filename>, and an extended $DLL(). See vircdll.txt for details, or fpu.dpr for an example. Note to DLL authors: although you can have mIRC-style functions and persistent functions with the same name in the same DLL, persistent calls use different function names and parameter types. * Built-in timestamping for text windows. Turn on the "show timestamps" option to see them by default, or right-click in a window to turn it on and off. Timestamps are saved even when timestamping is turned off, and toggling timestamp display affects lines that have already been added, as in AIM. * The script editor now has syntax hiliting and auto-indent. * Custom toolbar support, using Toolbar..EndToolbar blocks (similar to menu trees). See toolbars.vsc. * virc.lib now includes responses for CTCP USERINFO, FINGER, SOURCE, and CLIENTINFO, and an /sv command to brag about your client version. * These server form properties can now be used in scripts: Hostname, Nick, Ident, IRCName, Servername (read only), Port (read only), Connected (read only), ConnectedAt (read only), LastSent (read only). These channel form properties can also be used: ServerID (read only), Server (TForm), Channel, JoinString (read only), Mode, Key (read only), Limit (read only), Topic, TopicSetter, TopicTime, TopicHistory (TStringList). * Menu tree definitions can now contain an optional bitmap filename, surrounded by double-quotes before the caption. --- Changed behavior --- * The mouse wheel code has been changed. If your wheel hasn't been working properly (*cough* Gnowknaym), try turning off the "Mouse wheel fix" option. * 'Nop' event handlers in OVS now work the same way as they did in 1.x; that is, it sets a handler that does nothing. To actually unset an event handler (as 'Nop' did in pre7), use 'Nil' instead. * $ListReplace() now creates empty items in between: $ListReplace(2 2 foo a b c) => a b foo $ListReplace(2 2 foo a) => a "" foo * /kb now deops the victim. * Internal socket error handling has changed. * The configuration window now appears the first time running ViRC. * <OnConnect> events now get the server name in $0 and the network name in $1. $1 will be () if there is no matching network. * TDCC now works with a parameter at the end of CTCP DCC SEND, instead of using CTCP DCC TSEND. This means that if you TDCC send to an mIRC user, it will go through as regular DCC (with send-ahead) instead of being ignored. Turn on "use old TDCC handshake" to go back. * Tab characters are no longer copied to the clipboard. * 'true' and 'false' can be used in expressions to mean 1 and 0 respectively. Among other things, this means you can do 'if $prop($checkbox.Checked)'. * A default value can be specified to AddScriptControl: AddScriptControl config edit "Auto join:" autojoin = #virc * Commands sent in the background by ViRC (such as ISON commands for the notify list) will no longer reset $idletime(). Use 'Quote -idle <text>' or 'Raw -idle <text>' to do this from scripts. * Existing aliases, events, and toolbars will now be removed from memory before rehashing the script (with /rehash or the script editor). * Aliases are now stored in a hash table rather than a slow sequential list. --- Fixes --- * Focus for newly created windows is now correct again. * Clicking empty spots on the tab bar no longer causes it to grow. Closing the first window no longer leaves an extra separator. * The script editor's "this script loads" list no longer includes files that don't exist. * "%%" and "*%" in patterns will now work as expected. * Deleting items in the script editor doesn't break the last item. * Rearranged virc.lib again, it's now completely safe to edit from ViRC. * TextOutBitmap -nohilite works correctly. * Variables can now contain $char(0). * <OnDCCRequest> event handling is improved. * Hexadecimal values ($$a40c) work in expressions again. * Text windows no longer scroll to the bottom when they are resized. * The tab bar no longer appears when it's empty. * Menu items now run in the correct channel. Changes since ViRC 2.0pre6: * New window tab bar. This one docks at all four sides, puts all the tabs on one bar, and automatically updates the tab icons if a script changes a form's icon (not just for TTabbedForm). * New options: "no separators on window tab bar", "hide window tab bar", "automatically show DCC list" (for incoming or outgoing requests). * A channel control dialog is in. Use /ChannelControl [channel] or double- click in the channel window. It can be mapped as !ChannelControl. * New command: /exec <program> <parameters>. * The script editor no longer loses <DoubleClick> menu items. It's also stay-on-top instead of modal, and it will go back to the same file and item when it's closed and reopened. It can be mapped as !ScriptEditor. * /dde is fixed and can now poke data as well as reading and executing. * ViRC now has a DDE server. See vircdde.txt. * If ViRC can't load the default script, it will bring up the config form so the script path can be corrected, then quit. * $isdccchatting() now accepts a leading equal sign (=1 or =Atrox). * Only the most specific <OnNewDCCChatText> event will be fired, unless FallThrough is used. Use 'FireEvent -one' to fire your own events this way. * Text scroller fixes: gaps between bold and non-bold text are gone, ^R now correctly draws the background color. * The help menu has descriptions for the included files, and the scripting help files are on a submenu. * /^ no longer causes text display to be stuck off. * Script engine fix: an OVS event handler that sets a new handler for the same event on the same object will no longer cause access violations. * TInputMemo is now available in OVS - it's like TMemo but it handles attribute keys (^B, ^K, etc) and attribute pasting. TForm's OnClose event is also supported. Set $Action to caNone, caHide, caFree, or caMinimize. * The DCC list's position is saved and loaded correctly. * New properties for channel windows: TopicSetter (string), TopicTime (unixtime), and TopicHistory (TStringList). * New method for TMonkeySex: GetText(). Returns all the text in the control. * ViRC.lib has been rearranged so that the script editor won't lose the active nicks/modes code. * New function: $UnixTimeOf(dd/mm/yy hh:mm[:ss] [am/pm]) * $DecodeInterval() and $DecodeMInterval() now accept a second parameter, a format string containing characters w, d, h, m, s. The default format is 'dhms'. Lowercase characters are optional fields, uppercase characters are required fields. $decodeinterval(123 hms) => 2 minutes 3 seconds $decodeinterval(123 HMS) => 0 hours 2 minutes 3 seconds $decodeinterval(123 hm) => 2 minutes $decodeinterval(123 h) => 0 hours * The controls on server/channel/query/chat forms are now in their own panels (OutputPanel, InputPanel, NotifyPanel, NickListPanel). This should make it easier to fit new controls in. Changes since ViRC 2.0pre5: * VSInterp fixes: '@p $obj.Items.CommaText' wouldn't work, even though the property could be retrieved. RemoveFromSetProp was broken. * New functions: $getmode(), $gettopic(), $getkey(), $getlimit(). * New "keep channels open when dropped" option. * New script editor. Right-click on the tree to add or delete items. Remember that ViRC 2 load scripts from a file, not the registry - the editor works on files, not a "working copy" of the script as in 1.x. The header and footer appear before and after the script in the file, respectively; don't define aliases, events, or menus in the header or footer. The editor will load any ViRC script file, but if you load a file that wasn't created with the editor, you'll lose everything that appears between definitions (comments before events, etc.). Comments should be put in the header/footer or inside definitions. * Friendlier welcome/"import settings" dialog. * /load will now default to looking in the ViRC directory if no path is given. * The following built-in commands no longer display text: /say, /msg, /notice, /ctcp, /rctcp, /me, /desc. Instead, they fire script events: <OnMyChanText>, <OnMyPrivMsg>, <OnMyNotice>, <OnMyCTCP>, <OnMyRCTCP>, <OnMyChanAction>, <OnMyPrivAction>, <OnMyQueryText>, <OnMyQueryAction>. $0 is the target or window, $1- is the text. The events will be fired even if the text display is suppressed with the ^ prefix. DCC chat uses the same events as queries (this is the only time $N can be used on the global interpreter). $C is set to the target for channel and query events, and the active window for the others. Changes since ViRC 2.0pre4: * New "continuous backgrounds" option. This causes each window's background image to be tiled from the same starting point. * A wallpaper image can now be displayed behind the child windows. Combine this with continuous backgrounds for an interesting effect. * Numeric operators are now left-associative, like they should be: $(1-2+3) returns 2 ((1-2)+3), instead of -4 (1-(2+3)). * $notify() no longer displays text in the active window when used as a function. * The mouse wheel should now work again. Moving the wheel over the nick list will scroll the list; moving it anywhere else will scroll the output pane. * Channel window titles are now only set to the first 100 characters of the caption. This should prevent access violations in channels with very long topics. * New DCC options: "Force DCC IP address" and "force port range" (for incoming connections only). This is useful if you're behind a firewall or NAT (aka Internet Connection Sharing). The IP address will be evaluated if specified, so you can point it to a file on your NAT server: $readline(1 $noattribs(\\win2kbox\c\currentip.txt)) * Instead of /command, you can now also type //command (to evaluate it first) or ///text (to evaluate some text and show it in a message box). * /DNS will now accept a nick. If you have a hostname that looks like a nickname (no dots, doesn't start with a number), use /dns *host to prevent this. * New TSockets method: SListenRange(lowport highport). Attempts to listen on any port within the range, returning the port if successful, or 0 if not. * New "auto connect to servers" script setting. Set this to a comma-separated list of servers to connect to when you open the client. * Updated script documentation is included. Changes since ViRC 2.0pre3: * Logging paths containing \b, \i, \u, etc. will now work correctly. * OnServer works on server 16. * Text scroller updates: - Multiple lines of text are copied to the clipboard correctly. Attributes are also terminated at the end of the selection. - TextOut bitmaps are drawn transparently. Any pixels that are the same color as the bottom-left corner will be transparent. - Background images are available again. - A lock icon is now displayed in the bottom-right corner when a window is scrolled up, indicating that new lines will not be visible as they are added. * DLL calls are now supported. Use '/dll foo.dll funcname data' or $dll(foo.dll funcname data), surrounding the filename with quotes if necessary. The same format as mIRC's DLLs is used: type TDLLCall = function (Main, Active: HWND; Data, Params: PChar; Show, NoPause: BOOL): Integer stdcall; The Params buffer is initialized to "ViRC 200", where 200 is the current ViRC build. A return code of 0 (halt script) is treated the same as 1 (continue script). * The script log form can be mapped as !ScriptLog, when enabled. * New function: $striplinks(). This only strips hyperlinks and script links; $stripattrs() does neither. * Links are now correctly stripped from logs. * Built-in timers: /timer [timername] seconds repeats command /mtimer [timername] millisecs repeats command /timers ['all'] /untimer timername $timerexists(timername) $timerlist([serverid]) $gettimer(timername) => millisecs repeats server command A "repeats" value of 0 means the timer repeats forever. Timer names are shared across all servers, and any timers created on a server are deleted when that server is closed. Timer names may not start with a digit. If the timer name is omitted in /timer or /mtimer, an available name will be generated automatically. $timer() and $mtimer() can be used as functions, which will return the name of the newly created timer. Commands will not be evaluated when they are run (if you want it to happen, use Eval). Changes since ViRC 2.0pre2: * Script link colors are now averaged correctly. * 'TextOut -nohilite' (or TextOutBitmap -nohilite) can be used to prevent the window tabs from lighting up. * 'DNS hostname' now correctly performs the reverse lookup instead of just repeating the hostname you supplied, and only shows it if the result of the reverse lookup is different from the supplied hostname. * Part messages are now handled correctly. This may eliminate AddNickToChan errors. * \L and \S are now stripped from logs when attribute stripping is turned on. * A splash screen is now displayed as ViRC starts. * #172 is now handled correctly in patterns, as is % followed by * or #172. * Punctuation is now stripped from the end of URLs more reliably. * Variables removed by mask (with '-@ $foo.*' or when local variables are removed) are now matched case-sensitively. This is available to scripts as $wildmatchcase(). * $new() now works correctly if there is more than one space between 'ownedby' or 'position' and its argument. * The Active, ActiveMDIChild, FormState, ModalResult, and TileMode properties of TForm are now available. * Destroying an object from one of its event handlers will now work in *some* cases. Which ones work is dependent on the internals of Windows and the VCL. The command 'SafeDestroy' has been added which will always work, but won't actually destroy the object until the event handlers finish running. * $mapobject(#virc:WindowTab) can now be used to find the button on the tab bar corresponding to a given window. * $globmatch() and $globmatchcase() are now available, which only use '*' and '?' as wildcards. $maskmatch() is the same as $globmatch(). * New DCC config options: send ahead and block size. Changes since ViRC 2.0pre1: * TextOut on the global interpreter will now display to the active window. * $?="" now returns INPUT_CANCELLED if the user presses Cancel. * ViRC will no longer attempt to send data to the server from an <OnDisconnect> event. * <OnCreateWindow> will now be fired with "TDCCChatForm =nick =1" for DCC chat forms (with the appropriate =ID in $2). * New functions to get the nicks involved in a DCC chat: $LocalNick(=ID), $RemoteNick(=ID). * Objects created with OVS are no longer freed by the interpreter when it is destroyed - this fixes access violations, 100% CPU usage, and so on when closing ViRC. * Some more 1.x settings are now imported as script settings. * Kick/KB messages and exit/X messages are now evaluated as in 1.x. * New function: $IsA(<obj> <class>). * RPL_UMODEIS events with a colon before the user mode are now handled correctly. * Script link aliases now get $X, $Y, $Shift, and $Button, just like OnMouseDown handlers. They also get $Text (the visible text of the link) and $ScreenX and $ScreenY (the screen coordinates of the mouse click, suitable for use with TPopupMenu.Popup). * A form can now be destroyed from one of its event handlers. However, other controls should not be. * $UnixTime() is back to using 32-bit numbers. This prevents uncommon but bizarre flaws with the 64-bit numbers, such as all unixtimes being off by 136 years. * Server list changes: New server entries are now saved correctly the first time. You can now choose which servers and networks to export/import. Importing is now implemented. * The join and part bitmaps have been changed to a white arrow on a red background, which should be easier on the eyes. * Object handles are now shared between interpreters. * New method: TMenu.LoadFromMenuTree. This creates menu items to match the menu tree, and puts their handles in the local _item array; for example, an item named M_CTCPVERSION will be created with its handle in $_item.M_CTCPVERSION. Note that OnClick handlers are not set up for these items.. clicking them will not make anything happen by default. * MenuTree..EndMenuTree can now be used to define custom menu trees by giving a non-standard name. They will not be used by ViRC and cannot be used with MenuItem..EndMenuItem; they are intended for use as shown above. * AppendText now creates the file if it doesn't already exist. * New commands: ShowScriptLog, FireMenuItem [> channel] <item> on <tree> [= parameters]. * Ident requests are now answered with a CRLF at the end, which should make ident work with more servers. * The main menu no longer forgets all the hints and items when the menu tree is changed. * $prebuild can now be used to find the current prerelease version. * TMonkeySex's events can now be set: OnClick, OnDblClick: gets $Sender OnCopyText, OnHyperlink, OnLogging: gets $Sender and $Text OnScriptLink: gets $Sender, $Command, $Text, $Button, $Shift, $X, $Y * The default script link color has been changed. Script links are now displayed using the average between the regular text color and the script link color. * ViRC.lib now generates script links, which you can turn on and off with the checkboxes on the script settings tab. "Active nicks" brings up the nick list popup when you right-click a nick, "Active hosts" runs a DNS lookup on a hostname when you double-click it, "Active modes" lets you undo a mode change by right-clicking it, and "Active invites" lets you join a channel when you're invited by double-clicking it. * Hyperlinks and script links are now stripped before a TextOut to a TRichEdit. * Magic is now properly applied to channel nick list popups. Changes since ViRC 2.0pre-1: * Event masks like "% FOO" will now match either "xyz FOO" or "xyz FOO bar", but not "xyz FOOABC"; that is, the line from the server can contain extra words at the end that aren't in the mask. $wildmatch() still works as usual. You can get the same effect from $wildmatch() by putting an alt-0172 at the end of your pattern. * $currentserver_activewindow() is now an alias for $activewindow(). * TTrackBar and TNashButton are now available for scripts to use. * New commands: FlushIAL, SetInputLine. * New functions: $GetInputLine(), $MapProp(). * New syntax to uncache one bitmap: FlushBitmapCache <filename> * ViRC 1.x user/server lists are now imported. * New "timestamp logs" option. * The version info on virc.exe is fixed. * The script log window can now be resized, and right-clicking on it will let you change the buffer size.